/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package semac.control;

import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import semac.entidades.Empleado;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.GregorianCalendar;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.swing.JOptionPane;

/**
 *
 * @author Luigi
 */
public class CtrlEmpleados {
    private Conexion connection;
    private ResultSet resultado;
    private String query;
    private HttpServletRequest request;

    public CtrlEmpleados() throws IOException, ParserConfigurationException, SAXException{
        request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String urlFile =  request.getRealPath("/")+ "/WEB-INF/dataBase.xml";
        connection =  new Conexion(urlFile);
    }

    public void testConnection() throws ClassNotFoundException, SQLException{
        connection.startConnection();
        connection.closeConnection();
    }

    //Metodo que obtiene el codigo de la persona en base a la identidad
    public int getCodigoPersona(String identidad) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "select codigo_persona"
                + " from semac.persona"
                + " where identidad_persona = '" +  identidad + "'";
        resultado = connection.execute(query);
        resultado.next();
        int codigoPersona = Integer.parseInt((String)resultado.getObject("codigo_persona"));
        connection.closeConnection();
        return codigoPersona;
    }

    //Metodo que retorna true si existe una entidad empleado en la base de datos
    public boolean existeEmpleado(String identidad) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "select identidad_persona"
                + " from semac.persona"
                + " where identidad_persona = '" +  identidad + "'";
        resultado = connection.execute(query);
        resultado.next();
        connection.closeConnection();
        if (resultado.getRow() == 1)
            return true;
        return false;
    }

    // Extrae los datos del empleado de la base de datos en base al código de la persona.
    public Empleado getEmpleado(int codigoPer) throws ClassNotFoundException,SQLException{
        Empleado empleado;
        connection.startConnection();

        query = "select *"
                + " from semac.empleado natural join semac.persona as empper"
                + " where codigo_persona = " +  codigoPer;
        resultado = connection.execute(query);
        resultado.next();
        String identidad = resultado.getString("identidad_persona");
        String nombre = resultado.getString("nombre_persona");
        String apellido = resultado.getString("apellido_persona");
        String telefono = resultado.getString("telefono_persona");
        String celular = resultado.getString("celular_persona");
        String domicilio = resultado.getString("domicilio_persona");
        char sexo = resultado.getString("sexo_persona").charAt(0);
        String email = resultado.getString("email_persona");
        GregorianCalendar fechaCreacion = (GregorianCalendar) resultado.getObject("fechacreacion");
        GregorianCalendar fechaModificacion = (GregorianCalendar) resultado.getObject("fechamodificacion");
        int ultimoAcceso = resultado.getInt("codigo_cuenta");
        int codigoPersona = resultado.getInt("codigo_persona");
        GregorianCalendar fechaContratacion = (GregorianCalendar) resultado.getObject("fechacontratacion_empleado");
        empleado = new Empleado(identidad, nombre, apellido, telefono, celular,
        domicilio, sexo, email, fechaCreacion, fechaModificacion, ultimoAcceso,
        codigoPersona, fechaContratacion);
        connection.closeConnection();
        return empleado;
    }

    //Extrae los datos del empleado en base a la identidad
    public Empleado getEmpleado(String usuario) throws ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException{
        CtrlCuentas ctrlCta = new CtrlCuentas();
        Empleado empleado;

        connection.startConnection();
        int cta = ctrlCta.getCodigoPersona(usuario);
            
        query = "select *"
                + " from semac.persona natural join semac.empleado"
                + " where codigo_persona = '" +  cta + "'";
        resultado = connection.execute(query);
        resultado.next();
        String identidad = resultado.getString("identidad_persona");
        String nombre = resultado.getString("nombre_persona");
        String apellido = resultado.getString("apellido_persona");
        String telefono = resultado.getString("telefono_persona");
        String celular = resultado.getString("celular_persona");
        String domicilio = resultado.getString("domicilio_persona");
        char sexo = resultado.getString("sexo_persona").charAt(0);
        String email = resultado.getString("email_persona");

        GregorianCalendar fechaCreacion =
                (GregorianCalendar) resultado.getObject("fechacreacion");
        GregorianCalendar fechaModificacion =
                (GregorianCalendar) resultado.getObject("fechamodificacion");
        int ultimoAcceso = resultado.getInt("codigo_cuenta");
        int codigoPersona = resultado.getInt("codigo_persona");
        GregorianCalendar fechaContratacion = (GregorianCalendar) resultado.getObject("fechacontratacion_empleado");
        empleado = new Empleado(identidad, nombre, apellido, telefono, celular,
        domicilio, sexo, email, fechaCreacion, fechaModificacion, ultimoAcceso,
        codigoPersona, fechaContratacion);
        connection.closeConnection();
        return empleado;
    }

    //Metodo que actualiza un empleado en la base de datos-----------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------------------
    //Y donde puercas se actualizan los datos del empleado-----------------------------------------------------------------------
    public void updateEmpleado(Empleado empleado) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "update semac.persona" +
                " set identidad_persona = '" + empleado.getIdentidad() +
                "'," + "nombre_persona = '" + empleado.getNombre() + "'," + "apellido_persona = '" + empleado.getApellido() +
                "'," + "telefono_persona = '" + empleado.getTelefono() + "'," + "celular_persona = '" + empleado.getCelular() +
                "'," + "domicilio_persona = '" + empleado.getDomicilio() + "'," + "sexo_persona = '" + empleado.getSexo() +
                "'," + "email_persona = '" + empleado.getEmail() + "'," +
                "fechamodificacion = '" + empleado.getFechaModificacion().getTime().getDate()
                + "/" + (empleado.getFechaModificacion().getTime().getMonth() + 1) + "/" + 
                (empleado.getFechaModificacion().getTime().getYear() + 1900) + "'," + "codigo_cuenta" +
                empleado.getUltimoAcceso() +
                " where codigo_persona = " + empleado.getCodigoPersona();
        try{
            connection.execute(query);
        }catch(Exception ex){

        }
        connection.closeConnection();

        connection.startConnection();
        query = "update semac.empleado"
                + " set codigo_persona = " + empleado.getCodigoPersona()
                + "," + "fechacontratacion_empleado = '" + empleado.getFechaContratacion().getTime().getDate()
                + "/" + (empleado.getFechaContratacion().getTime().getMonth() + 1)
                + "/" + (empleado.getFechaContratacion().getTime().getYear() + 1900)
                + "'" + " where codigo_persona = " + empleado.getCodigo();
        try{
        connection.execute(query);
        }catch(Exception ex){
            
        }
        connection.closeConnection();
    }

    // En el insert del empleado primero se inserta la persona, se obtiene el código de la persona y se inserta el empleado
    public void insertEmpleado(Empleado empleado) throws ClassNotFoundException,SQLException{
        //En esta coneccion inserto los datos de la persona en la tabla semac.persona
        connection.startConnection();
        query = "insert into semac.persona (identidad_persona,nombre_persona,apellido_persona,"
                + "telefono_persona,celular_persona,domicilio_persona,sexo_persona,email_persona,"
                + "fechacreacion,fechamodificacion,codigo_cuenta)"
                + " values('" + empleado.getIdentidad()
                + "','" + empleado.getNombre() + "','" + empleado.getApellido()
                + "','" + empleado.getTelefono() + "','" + empleado.getCelular()
                + "','" + empleado.getDomicilio() + "','" + empleado.getSexo()
                + "','" + empleado.getEmail() + "','" + empleado.getFechaCreacion().getTime().getDate()
                + "/" + (empleado.getFechaCreacion().getTime().getMonth() + 1)
                + "/" + (empleado.getFechaCreacion().getTime().getYear() + 1900)
                + "','" + empleado.getFechaModificacion().getTime().getDate()
                + "/" + (empleado.getFechaModificacion().getTime().getMonth() + 1) + "/" + (empleado.getFechaModificacion().getTime().getYear() + 1900)
                + "'," + empleado.getUltimoAcceso()+ ")";
        try{
            connection.execute(query);
        }catch(Exception ex){}

        query = "select codigo_persona"
                + " from semac.persona"
                + " where identidad_persona = '" +  empleado.getIdentidad() + "'";
        resultado = connection.execute(query);
        resultado.next();
        int codigoPersona = resultado.getInt("codigo_persona");

        query = "insert into semac.empleado (codigo_persona,"
                + "fechacontratacion_empleado)"
                + " values(" + codigoPersona
                + ",'" + empleado.getFechaContratacion().getTime().getDate()
                + "/" + (empleado.getFechaContratacion().getTime().getMonth() + 1) + "/" 
                + (empleado.getFechaContratacion().getTime().getYear() + 1900) + "')";
        try{
            connection.execute(query);
        }catch(Exception ex){}
        connection.closeConnection();
    }

}